﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sirius.Util
{
    public static class EmojiFormat
    {
        //定义Emoji容器
        public static Dictionary<string, string> emojiList = new Dictionary<string, string>();
        //判断是否包含Emoji
        public static bool containsEmoji(string source)
        {
            if(source==null || source=="")
                return false;
            int len = source.Length;
            bool isEmoji = false;
            for (int i = 0; i < len; i++)
            {
                char hs = source[i];
                if (0xd800 <= hs && hs <= 0xdbff)
                {
                    if (source.Length > 1)
                    {
                        char ls = source[i];
                        int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                        if (0x1d000 <= uc && uc <= 0x1f77f)
                        {
                            return true;
                        }
                    }
                }
                else
                {
                    // non surrogate
                    if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b)
                    {
                        return true;
                    }
                    else if (0x2B05 <= hs && hs <= 0x2b07)
                    {
                        return true;
                    }
                    else if (0x2934 <= hs && hs <= 0x2935)
                    {
                        return true;
                    }
                    else if (0x3297 <= hs && hs <= 0x3299)
                    {
                        return true;
                    }
                    else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50 || hs == 0x231a)
                    {
                        return true;
                    }
                    if (!isEmoji && source.Length > 1 && i < source.Length - 1)
                    {
                        char ls = source[i + 1];
                        if (ls == 0x20e3)
                        {
                            return true;
                        }
                    }
                }
            }
            return isEmoji;

        }


        public static void EmojiListInit()
        {
            emojiList.Add("☀", "<emoji:9728>");
            emojiList.Add("☕", "<emoji:9749>");
            emojiList.Add("☺", "<emoji:9786>");
            emojiList.Add("✨", "<emoji:10024>");
            emojiList.Add("❌", "<emoji:10060>");
            emojiList.Add("❔", "<emoji:10068>");
            emojiList.Add("🌹", "<emoji:127801>");
            emojiList.Add("🍉", "<emoji:127817>");
            emojiList.Add("🍎", "<emoji:127822>");
            emojiList.Add("🍓", "<emoji:127827>");
            emojiList.Add("🍜", "<emoji:127836>");
            emojiList.Add("🍞", "<emoji:127838>");
            emojiList.Add("🍧", "<emoji:127847>");
            emojiList.Add("🍺", "<emoji:127866>");
            emojiList.Add("🍻", "<emoji:127867>");
            emojiList.Add("🎉", "<emoji:127881>");
            emojiList.Add("🐛", "<emoji:128027>");
            emojiList.Add("🐮", "<emoji:128046>");
            emojiList.Add("🐳", "<emoji:128051>");
            emojiList.Add("🐵", "<emoji:128053>");
            emojiList.Add("👊", "<emoji:128074>");
            emojiList.Add("👌", "<emoji:>128076");
            emojiList.Add("👍", "<emoji:128077>");
            emojiList.Add("👏", "<emoji:128079>");
            emojiList.Add("👙", "<emoji:128089>");
            emojiList.Add("👦", "<emoji:128102>");
            emojiList.Add("👨", "<emoji:128104>");
            emojiList.Add("💓", "<emoji:128147>");
            emojiList.Add("💝", "<emoji:128157>");
            emojiList.Add("💤", "<emoji:128164>");
            emojiList.Add("💦", "<emoji:128166>");
            emojiList.Add("💨", "<emoji:128168>");
            emojiList.Add("💪", "<emoji:128170>");
            emojiList.Add("📫", "<emoji:128235>");
            emojiList.Add("🔥", "<emoji:128293>");
            emojiList.Add("😁", "<emoji:128513>");
            emojiList.Add("😂", "<emoji:128514>");
            emojiList.Add("😄", "<emoji:128516>");
            emojiList.Add("😊", "<emoji:128522>");
            emojiList.Add("😌", "<emoji:128524>");
            emojiList.Add("😏", "<emoji:128527>");
            emojiList.Add("😒", "<emoji:128530>");
            emojiList.Add("😓", "<emoji:128531>");
            emojiList.Add("😔", "<emoji:128532>");
            emojiList.Add("😘", "<emoji:128536>");
            emojiList.Add("😚", "<emoji:128538>");
            emojiList.Add("😜", "<emoji:128540>");
            emojiList.Add("😝", "<emoji:128541>");
            emojiList.Add("😭", "<emoji:128557>");   
            emojiList.Add("😰", "<emoji:128560>");
            emojiList.Add("😳", "<emoji:128563>");
        }
        //Emoji转义字符串
        public static string EmojiToString(string text)
        {
            if(containsEmoji(text) && text != null && text!="") 
            {
                foreach (var key in emojiList)
                {
                    text = text.Replace(key.Key, key.Value);
                    return text;
                }
            }
            return text;
        }
        //字符串转义Emoji
        public static string StringToEmoji(string text)
        {
            if (containsEmoji(text) && text != null && text != "") 
            {
                foreach (var key in emojiList)
                {
                    text = text.Replace(key.Value, key.Key);
                }
                return text;
            }
            return text;


        }
    }
}
